package com.ruoyi.system.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 合同管理实体类
 * 对应数据库表 contract_management
 */
@Data
@TableName("t_contract")
public class ContractDO {

    /**
     * 合同唯一标识（自增主键）
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 关联项目id
     */
    private Long projectId;

    /**
     * 合同类型
     * 枚举值：1-施工合同，2-整装合同，3-主材合同，4-软装合同
     * 数据库字段为int类型，此处修正为Integer匹配
     */
    private Integer contractType;

    /**
     * 合同名称
     */
    private String contractName;

    /**
     * 纸质合同编号（唯一，用于实体合同对应）
     */
    private String paperContractNo;

    /**
     * 签订人姓名
     */
    private String signer;

    /**
     * 签订日期（格式：YYYY-MM-DD）
     */
    private LocalDate signDate;

    /**
     * 合同总金额（未优惠前）
     * 精度：12位数字，2位小数
     */
    private BigDecimal totalAmount;

    /**
     * 优惠金额
     * 例如：1000.00表示优惠1000元，默认0.00
     * 精度：12位数字，2位小数
     */
    private BigDecimal discountAmount;

    /**
     * 折扣率
     * 小数形式，例如0.95表示95折，默认1.00（无折扣）
     * 精度：5位数字，2位小数
     */
    private BigDecimal discountRate;

    /**
     * 合同签订金额（最终实际金额）
     * 精度：12位数字，2位小数
     */
    private BigDecimal signedAmount;

    /**
     * 变更金额（正数表示增加，负数表示减少）
     * 精度：12位数字，2位小数，默认0.00
     */
    private BigDecimal changeAmount;

    /**
     * 变更后总金额（变更后的最终合同金额）
     * 精度：12位数字，2位小数
     */
    private BigDecimal changedTotalAmount;

    /**
     * 已收款（累计已收取的金额）
     * 精度：12位数字，2位小数，默认0.00
     */
    private BigDecimal receivedAmount;

    /**
     * 未收金额（剩余未收取的金额）
     * 精度：12位数字，2位小数，默认0.00
     */
    private BigDecimal unreceivedAmount;

    /**
     * 预期工期（单位：天）
     */
    private Integer expectedDuration;

    /**
     * 周末是否施工
     * 枚举值：1-是（不施工），2-否（施工）
     * 数据库字段为int类型，此处修正为Integer匹配
     */
    private Integer noWeekendWork;

    /**
     * 节假日是否施工
     * 枚举值：1-是（不施工），2-否（施工）
     * 数据库字段为int类型，此处修正为Integer匹配
     */
    private Integer noHolidayWork;

    /**
     * 预计开工日期（格式：YYYY-MM-DD）
     */
    private LocalDate expectedStartDate;

    /**
     * 预计完工日期（格式：YYYY-MM-DD）
     */
    private LocalDate expectedEndDate;

    /**
     * 特殊条款（长文本，如补充协议内容）
     */
    private String specialTerms;

    /**
     * 合同备注（其他需说明的信息）
     */
    private String remarks;

    /**
     * 审核状态
     * 枚举值：0-待审核，1-审核中，2-审核通过，3-审核驳回
     */
    private Integer auditStatus;

    /**
     * 逻辑删除标识
     * 0-未删除，1-已删除
     */
    @TableLogic
    private Integer isDeleted;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    private LocalDateTime updateTime;

    /**
     * 合同签署状态：0-未签署，1-已签署
     */
    @TableField("sign_status")
    private Integer signStatus;

    /**
     * 签署确认时间
     */
    @TableField("sign_confirm_time")
    private LocalDateTime signConfirmTime;

    /**
     * 签署后的文件URL（带签名的文件/占位）
     */
    @TableField("sign_file_url")
    private String signFileUrl;

    /**
     * 编辑锁：0-未锁定，1-锁定（审核/推送期间锁定）
     */
    @TableField("edit_locked")
    private Integer editLocked;
}